/**
 * @author Anderson R. Livramento
 * Copyright (C) 2008 Anderson Rodrigues Livramento <anderdevel@users.sourceforge.net>
 *
 * O conteúdo deste arquivo está disponível dentro dos termos 
 * da Licença Pública Geral GNU como publicada pela 
 * Fundação do Software Livre (FSF); na versão 2 da Licença, ou
 * (na sua opnião) qualquer versão mais recente.
 *
 * Este programa é distribuído na esperança que possa ser útil,
 * mas SEM NENHUMA GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a
 * qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob
 * o título "LICENCA.txt", junto com este programa; se não, escreva para
 * a Fundação do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor,
 * Boston, MA  02110-1301  US
 */
/**
 * Orders out interface
 * depends: datatable.js
 */

var Votacao = {
    ajax_url_mostras: ajax_url_base + '/mostras',
    ajax_url_candidatos: ajax_url_base + '/candidatos',
    oCandidateSelected: null,

    //################ candidate_grid YAHOO.widget.DataTable ##############
    candidate_edit_data: null,
    candidate_grid: null,

    create_candidate_grid: function(){
        var data_model = new YAHOO.util.DataSource([]);
        data_model.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
        data_model.responseSchema = {fields:['cdcandidato','idcandidato','nmcandidato']};
    
        var column_model = [
            {key:'idcandidato',label:'C&oacute;digo',width:'70px',sortable:true},
            {key:'nmcandidato',label:'Candidato',width:'520px',sortable:true}
        ];
    
        var oConfigs = {
            selectionMode:'single',
            paginated:true,
            paginator:{rowsPerPage:15}
        };
    
        this.candidate_grid = create_datatable('candidate_grid',column_model,data_model,oConfigs);
        if (this.candidate_edit_data != null){
            this.add_candidate_grid_ex(this.candidate_edit_data)
        }
    },

    find_candidate_grid: function(oCandidato){
        var record_set = this.candidate_grid.getRecordSet();
      
        for (var i=0;i < record_set.getLength();i++){
            var record = record_set.getRecord(i);
            if (record.getData('cdcandidato') == oCandidato.getData('cdcandidato'))
                return i;
        }
        return -1;
    },
    
    add_candidate_grid_ex: function(aData){
      for (var i=0;i < aData.length;i++){
          this.candidate_grid.getRecordSet().addRecord(aData[i]);
      }
      this.candidate_grid.refreshView();
    },
    
    add_candidate_grid: function(){
        if (this.oCandidateSelected != null){
            var found_index = this.find_candidate_grid(this.oCandidateSelected);
            var oCandidato = {
                cdcandidato: this.oCandidateSelected.getData('cdcandidato'),
                idcandidato: this.oCandidateSelected.getData('idcandidato'),
                nmcandidato: this.oCandidateSelected.getData('nmcandidato')
            };
            if (found_index > -1){
                var record = this.candidate_grid.getRecordSet().getRecord(found_index);
                this.candidate_grid.updateRow(found_index,oCandidato);
            }
            else{
                this.candidate_grid.getRecordSet().addRecord(oCandidato);
            }
            this.candidate_grid.refreshView();
            this.oCandidateSelected = null;
            // Clean search fields
            document.getElementById('nmcandidato').value = '';
            document.getElementById('nmcandidato').focus();
        }
    },
    
    rem_candidate_grid: function(){
        if (this.candidate_grid.getSelectedRows() && this.candidate_grid.getSelectedRows().length > 0){
            var record = this.candidate_grid.getRecord(this.candidate_grid.getSelectedRows()[0]);
            if (confirm('Deseja excluir o candidato: ' + record.getData('nmcandidato') + '?')){
                var rec_index = this.candidate_grid.getRecordSet().getRecordIndex(record);
                this.candidate_grid.getRecordSet().deleteRecord(rec_index);
                this.candidate_grid.unselectAllRows();
                this.candidate_grid.refreshView();
            }
        }
        else{
            alert('Oops! Esquecendo alguma coisa?\nSelecione um item para remover.');
        }
    },
    //################### x-window dialog #######################################
    x_window: null,
    x_window_title: null,
    
    create_x_window: function(){
        this.x_window = new YAHOO.widget.Dialog('x-window',{width:'600px',fixedcenter:true,visible:false,constraintoviewport:true,buttons:[
            {text:'Fechar',handler:function(){ Votacao.x_window_hide();}}]});
        this.x_window.render();    
    },
    
    x_window_show: function(){
        this.x_window.setHeader(this.x_window_title);
        this.x_window.show();
    },
    
    x_window_hide: function(){
        if (this.x_grid != null){
            this.x_grid.destroy();
            this.x_grid = null;
        }
        this.x_window.hide();
    },
    //################## x-grid Dynamic DataTable ##############################
    x_grid: null,

    create_mostra_table: function(aData){
        var ds = new YAHOO.util.DataSource(aData);
        ds.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
        ds.responseSchema = {fields:['cdmostra','nmmostra']};
      
        var cm = [
            {key:'nmmostra',label:'Mostra',width:'550px'}
        ];
        
        this.x_grid = create_datatable('x-grid',cm,ds);
        this.x_grid.subscribe('rowSelectEvent',this.row_selection_mostra);
    },
  
    row_selection_mostra: function(oArgs){
        document.getElementById('cdmostra').value = oArgs.record.getData('cdmostra');
        document.getElementById('nmmostra').value = oArgs.record.getData('nmmostra');
        Votacao.x_window_hide();
    },
    
    find_mostra_click: function(){
        var q = document.getElementById('nmmostra').value;
        var url = this.ajax_url_mostras + '?q=' + q;
        this.x_window_title = 'VotaFAM - Mostras';
        retrieveURL(url,'GET',this.find_mostra_result,function(){});
    },
    
    find_mostra_result: function(json_data){
        var data = eval('(' + json_data + ')');
        Votacao.create_mostra_table(data);
        Votacao.x_window_show();
    },

    create_candidato_table: function(aData){
        var ds = new YAHOO.util.DataSource(aData);
        ds.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
        ds.responseSchema = {fields:['cdcandidato','idcandidato','nmcandidato']};
      
        var cm = [
            {key:'idcandidato',label:'C&oacute;digo',width:'50px'},
            {key:'nmcandidato',label:'Candidato',width:'500px'}
        ];
        
        this.x_grid = create_datatable('x-grid',cm,ds);
        this.x_grid.subscribe('rowSelectEvent',this.row_selection_candidato);
    },
  
    row_selection_candidato: function(oArgs){
        document.getElementById('nmcandidato').value = oArgs.record.getData('nmcandidato');
        Votacao.oCandidateSelected = oArgs.record;
        Votacao.x_window_hide();
    },
    
    find_candidato_click: function(){
        var q = document.getElementById('nmcandidato').value;
        var url = this.ajax_url_candidatos + '?q=' + q;
        this.x_window_title = 'VotaFAM - Candidatos';
        retrieveURL(url,'GET',this.find_candidato_result,function(){});
    },
    
    find_candidato_result: function(json_data){
        var data = eval('(' + json_data + ')');
        Votacao.create_candidato_table(data);
        Votacao.x_window_show();
    },
    
    validate_form: function(){
        var candidate_list = new Array();
        var record_set = this.candidate_grid.getRecordSet();
        
        for (var i=0;i < record_set.getLength();i++){
            var record = record_set.getRecord(i);
            candidate_list.push({
                cdcandidato: record.getData('cdcandidato'),
                idcandidato: record.getData('idcandidato'),
                nmcandidato: record.getData('nmcandidato')
            });
        }
        document.getElementById('candidate_list').value = candidate_list.toJSONString();
    },

    init: function(){
        this.create_candidate_grid();
        this.create_x_window();
        // Eventos
        YAHOO.util.Event.addListener('btfind_mostra','click',this.find_mostra_click,this,true);
        YAHOO.util.Event.addListener('btfind_candidato','click',this.find_candidato_click,this,true);
        YAHOO.util.Event.addListener('btadd_candidato','click',this.add_candidate_grid,this,true);
        YAHOO.util.Event.addListener('btremove_candidato','click',this.rem_candidate_grid,this,true);
        YAHOO.util.Event.addListener('votacao_form','submit',this.validate_form,this,true);
    }
}

YAHOO.util.Event.onDOMReady(Votacao.init,Votacao,true);